# @Time    :2025/3/30 19:37
"""
动态添加属性和方法
题目：创建一个 Animal 类，只有 __init__ 方法初始化 name 属性。
动态给一个 Animal 实例添加 age 属性并赋值；定义一个普通函数 run 打印 "{name} 在奔跑"，

将其动态添加为实例方法并调用；动态给 Animal
类添加一个类方法 set_species
设置类属性 species（初始值为 "动物"）并调用。
"""

#
# class Animal:
#     def __init__(self, name):
#         self.name = name
#
#
# def run():
#     print(f"{a1.name}在奔跑")
#
# a1 = Animal("样子")
# a1.age = 12
# print(a1.age)
#
# # 将其动态添加为实例方法并调用
# a1.run = run
# a1.run()
#
#
# @classmethod
# def set_species(cls, new_species):
#     cls.species = new_species
#
#
# Animal.set_species = set_species
# Animal.set_species("哺乳动物")
# print(Animal.species)



class Animal:
    def __init__(self, name):
        self.name = name

# 创建一个 Animal 实例
dog = Animal("旺财")

# 动态给实例添加 age 属性并赋值
dog.age = 3

# 定义一个普通函数 run
def run(self):
    print(f"{self.name} 在奔跑")

# 将 run 函数动态添加为实例方法
import types
dog.run = types.MethodType(run, dog)

# 调用动态添加的实例方法
dog.run()

# 定义一个类方法 set_species
@classmethod
def set_species(cls, species):
    cls.species = species

# 将 set_species 函数动态添加为类方法
Animal.set_species = set_species

# 调用动态添加的类方法
Animal.set_species("狗")

# 打印类属性 species
print(Animal.species)






"""
class Animal:
    def __init__(self, name):
        self.name = name

# 正确的实例方法定义（需要self参数）
def run(self):
    print(f"{self.name}在奔跑")

a1 = Animal("样子")
a1.age = 12
print(a1.age)  # 输出: 12

# 正确动态添加实例方法
import types
a1.run = types.MethodType(run, a1)
a1.run()  # 输出: 样子在奔跑

# 类方法定义
@classmethod
def set_species(cls, new_species):
    cls.species = new_species

# 动态添加类方法
Animal.set_species = set_species
Animal.set_species("哺乳动物")

# 正确访问类属性
print(Animal.species)  # 输出: 哺乳动物
"""